package com.kxr.day09.webmagic.pageProcessor;

import com.kxr.day09.utils.DateUtils;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 爬取中国青年网的数据
 * 分页爬取的问题
 */
public class QNPageProcessor implements PageProcessor {

    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10 * 1000);

    @Override
    public void process(Page page) {
        // 获取
//        System.out.println(page.getUrl());
        // 发现新的链接和处理详情页
        // 主要分为两类页面，1类页面是列表页，2类页面是详情页，进行处理操作
        // Request参数传递的操作，分页信息可以做为参数进行传递
        Integer index = (Integer) page.getRequest().getExtra("index");
        if (index != null) {
            System.out.println("++++++++++++++++++++++++++++");
            System.out.println("++++++++++++++++++++++++++++");
            System.out.println("列表界面:" + page.getUrl());
            // 代表是列表界面，目的为了发现详情链接和跳转到下一个列表界面
            // 选择的时候，选到样式为main下面的样式为tj3_1下面的所有的a标签
            // 发现详情页的链接
            page.addTargetRequests(page.getHtml().css(".main .tj3_1").links().all());
            // 翻页查询下一页的内容
            // 构建request
            if (index < 9) {
                Request request = new Request();
                int nextIndex = index + 1;
                request.setUrl("http://news.youth.cn/gn/index_" + nextIndex + ".htm");
                Map<String, Object> map = new HashMap<>();
                map.put("index", nextIndex);
                request.setExtras(map);
                // 添加到下一次爬取
                page.addTargetRequest(request);
            }
            // 针对列表界面不交给pipeline处理
            page.setSkip(true);
        } else {
            // 代表详情界面
            System.out.println("新闻详情:" + page.getUrl());
            // 准备数据
            ResultItems resultItems = page.getResultItems();
            resultItems.put("title", page.getHtml().xpath("//div[@class='page_bt']//p[@class='pbt']/text()").get());
            // 日期的处理
            String timeStr = page.getHtml().xpath("//div[@class='page_bt']//p[@class='pwz']/text()").get().substring(5, 24);

            // 使用工具类进行日期格式化，不用每次读写重复的代码了
            resultItems.put("time", DateUtils.parseTimestamp(timeStr,"yyyy-MM-dd hh:mm:ss"));

            resultItems.put("content", page.getHtml().xpath("//div[@class='page_nr']").smartContent().get());
            resultItems.put("contentHtml", page.getHtml().xpath("//div[@class='page_nr']").get());
            resultItems.put("category", page.getHtml().xpath("//span[@class='lm_mc']/a[2]/text()").get());
            resultItems.put("source", "中国青年网");
            resultItems.put("author", page.getHtml().xpath("//div[@class='page_bt']//p[@class='pwz']/a/text()").get());

        }
    }

    @Override
    public Site getSite() {
        return site;
    }
}
